package ControllerLag;

import DBLag.DbCustomer;
import DBLag.DbLocker;
import DBLag.IFDbCustomer;
import DBLag.IFDbLocker;
import ModelLag.Customer;
import ModelLag.Locker;
import java.util.ArrayList;

/**
 * Dette er en controllerklasse som bruges til styring af udlejning af lockers.
 * @author DM75 Gruppe 3.
 * @version 22-12-2011.
 */
public class LockerCustomerCTR {
    private IFDbLocker dbLocker;
    private IFDbCustomer dbCustomer;
    
    public LockerCustomerCTR()
    {
        dbLocker = new DbLocker();
        dbCustomer = new DbCustomer();
    }
    
    /**
     * Opretter en udlejning af et lockerObj.
     * @param lockerID lockerID på det lockerObj som skal udlejes.
     * @param phoneNo phoneNo på det customerObj som skal leje det pågældende lockerObj.
     * @param keys Antal nøgler som Customer får udleveret.
     * @return 1 = lykkedes. -1 = mislykkedes.
     */
    public int rentLocker(int lockerID, String phoneNo, int keys)
    {
        int rc = -1;
        
        Locker lockerObj = dbLocker.findLocker(lockerID);        
        Customer customerObj = dbCustomer.findCustomer(phoneNo);
        
        rc = dbLocker.insertLockerCustomer(lockerObj, customerObj);
        if(rc == 1)
        {
            lockerObj.setAvailable(1);
            lockerObj.setAmountOfKeys(keys);
            dbLocker.updateLocker(lockerObj);
        }
        return rc;
    }
    
    /**
     * Henter en liste med alle udlejede lockerObj.
     * @return ArrayList med udlejede lockerObj.
     */
    public ArrayList<Locker> getAllRentetLockers()
    {
        return dbLocker.getRentetLockers(true);
    }
    
    /**
     * Henter en liste med alle IKKE udlejede lockerObj.
     * @return ArrayList med alle IKKe udlejede lockersObj.
     */
    public ArrayList<Locker> getFreeLockers()
    {
        return dbLocker.getFreeLockers();
    }
    
    /**
     * Sletter en udlejning ved hjælp af ID på lockerObj.
     * @param lockerID ID på lockerObj.
     * @return 1 = lykkedes. -1 = mislykkedes.
     */
    public int deleteARent(int lockerID)
    {
        int rc = -1;
        rc = dbLocker.deleteLockerCustomer(lockerID);
        
        if(rc == 1)
        {
            Locker lockerObj = dbLocker.findLocker(lockerID);
            lockerObj.setAvailable(0);
            lockerObj.setAmountOfKeys(0);
            dbLocker.updateLocker(lockerObj);
        }
        return rc;
    }
    
    /**
     * Opdatere et lejet lockerObj ud med et nyt customerObj.
     * @param lockerID ID på lockerObj.
     * @param phoneNo phoneNo på customerObj.
     * @return 1 = lykkedes. -1 = mislykkedes.
     */
    public int updateRent(int lockerID, String phoneNo)
    {
        Locker lockerObj = dbLocker.findLocker(lockerID);
        Customer customerObj = dbCustomer.findCustomer(phoneNo);

        return dbLocker.updateLockerCustomer(lockerObj, customerObj);
    }
}
